package common

import (
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"os"
)

var Logger *zap.SugaredLogger

func init() {
	Logger = sugarLoggerInit()
}

func sugarLoggerInit() *zap.SugaredLogger {
	// 创建生产环境的日志记录器配置
	config := zap.NewProductionConfig()
	// 设置自定义的时间格式
	config.EncoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")
	config.EncoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder

	// 配置 lumberjack 日志轮转
	lumberJackLogger := &lumberjack.Logger{
		Filename:   "D:/DevelopProject/GolandSpace/log/parking.log", // 日志文件路径
		MaxSize:    100,                                             // 日志文件最大大小（MB）
		MaxBackups: 30,                                              // 保留的旧日志文件数量
		MaxAge:     1,                                               // 保留旧日志文件的最大天数
		Compress:   false,                                           // 是否压缩旧日志文件
	}

	// 创建文件写入器
	fileWriteSyncer := zapcore.AddSync(lumberJackLogger)

	// 创建控制台写入器
	consoleWriteSyncer := zapcore.Lock(os.Stdout)

	// 创建多路写入器
	writeSyncer := zapcore.NewMultiWriteSyncer(fileWriteSyncer, consoleWriteSyncer)

	// 使用生产环境的编码器配置
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05")
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
	// 设置编码器
	encoder := zapcore.NewJSONEncoder(encoderConfig)

	// 设置日志级别
	level := zap.NewAtomicLevelAt(zap.InfoLevel)

	// 设置 zap 日志的核心
	core := zapcore.NewCore(encoder, writeSyncer, level)

	// 使用配置创建新的日志记录器
	logger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.DPanicLevel))

	// 将日志记录器转换为 SugaredLogger
	return logger.Sugar()
}

// GetLogger 返回日志记录器实例
func GetLogger() *zap.SugaredLogger {
	return Logger
}
